#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>


typedef struct cadastro{
int codigo;
char nome[50];
char bairro[50];
char rua[50];
int telefone;
}Cadastro;

typedef struct pedido{
int codigopedido;
char sabor[50];
//char tamanho[50];
float preco;
}Pedido;

typedef struct venda{
    int codigo_cliente;
    int codigo_pedido;
    float entrada;
}Venda;

Cadastro leitura [50];
Cadastro clientes[50];
Pedido pedidos[50];
Venda vendas[50];

int indiceCliente = -1;
int indicePedido = -1;
int indiceVenda = -1;

int tamanhopizza = -1;
int pizza1=0;
int pizza2=0;
int pizza3=0;
char tamanho;
int numero[50];
Cadastro cliente;
int i ;
int menu();
void cadastraCliente();
void listarCliente();
void cadastraSabor();
void listarSabor();
void realizarVenda();
void listarVenda();
void calcularTotalVendas();
void pizzamaisvendida();
int naoExisteClienteCadastrado(int codigo);
void escreveremarquivo();
void listararquivo();


int main (){


    int opcao = -1;

do
{
    opcao = menu();

        switch(opcao){

            case 1:
                cadastraCliente();
                break;
            case 2:
                listarCliente();
                break;
            case 3:
                cadastraSabor();
                break;
            case 4:
                listarSabor();
                break;
            case 5:
                realizarVenda();
                break;
            case 6:
                listarVenda();
                break;
            case 7:
                calcularTotalVendas();
                break;
            case 8:
                pizzamaisvendida();
                break;
            case 9:
                listararquivo();
                break;
            case 10:
                puts("Programa  finalizado!");
                break;


//Ler aquivo

            }
                }while(opcao!=9);
            }


int menu(){
    int opcao;
        system("color 7c");
        printf("\n\n");
        printf("************    ESCOLHA UMA DAS OPCOES   ******************\n");
        printf("***********************************************************\n");
        printf("*******          1.CADASTRAR CLIENTES        **************\n");
        printf("*******          2.Listar Cliente            **************\n");
        printf("*******          3.Cadastrar Pedido          **************\n");
        printf("*******          4.Listar Pedido             **************\n");
        printf("*******          5.Vender                    **************\n");
        printf("*******          6.Listar Vendas             **************\n");
        printf("*******          7.Total de vendas           **************\n");
        printf("*******          8.Pizza Mais Vendida        **************\n");
        printf("*******          9.Listar Arquivo            **************\n");
        printf("*******          10.Sair                     **************\n");
        printf("***********************************************************\n");
        fflush(stdin);
        scanf("%d",&opcao);
        system("cls");
        return opcao;
        }

void cadastraCliente(){

    system ("color 17");
    if (indiceCliente == 50 ){
        puts("Nao eh possivel cadastrar mais clientes");
        return;}

indiceCliente++;
Cadastro cliente;
                                    printf("Informe o codigo do cliente:\n");
                                    scanf("%d",&cliente.codigo);

                                    printf("Informe o nome do cliente:\n");
                                    fflush(stdin);
                                    fgets(cliente.nome, 49, stdin);

                                    printf("informe o bairro:\n");
                                    fflush(stdin);
                                    fgets(cliente.bairro, 49, stdin);


                                    printf("Informe a rua:\n");
                                    fflush(stdin);
                                    fgets(cliente.rua, 49, stdin);


                                    printf("Informe o telefone:\n");
                                    fflush(stdin);
                                    scanf("%d",&cliente.telefone);
                                    system("cls");

                                    clientes[indiceCliente] = cliente;

                                    FILE *arquivo;

    int i;

    //fflush(stdin);
    //fgets(cliente.codigo, 49, stdin);
    fgets(cliente.nome, 49, stdin);
    fflush(stdin);
    fgets(cliente.bairro, 49, stdin);
    fflush(stdin);
    fgets(cliente.rua, 49, stdin);
    fflush(stdin);



    if((arquivo = fopen("cliente.txt","wb")) == NULL)
      {
        printf("Erro ao abrir arquivo!!!\n\n");
        return(menu) ;
      }


    for(i = 0 ; i < 49; i++){
        fwrite(&clientes[i], sizeof(Cadastro), 1, arquivo);
    }

    fclose(arquivo);

   // i++;

       }


void listarCliente(){
system("color 30");
    int i;
    if (indiceCliente == -1 ){
        puts("Nao existem clientes cadastrados");
    }
    for (i = 0 ; i <= indiceCliente ; i++){
        printf("Codigo do cliente: %d\n\n", clientes[i].codigo);
        printf("Nome do cliente: %s\n", clientes[i].nome);
        printf("Bairro: %s\n", clientes[i].bairro);
        printf("Rua: %s\n", clientes[i].rua);
        printf("Telefone: %d\n", clientes[i].telefone);
    }

}



void cadastraSabor(){
    system("color 30");
    if (indicePedido == 50 ){
        puts("Nao eh possivel cadastrar mais imoveis");
        return;
    }

    indicePedido++;
    Pedido pedido;
    puts("Digite o codigo do pedido");
    scanf("%d", &pedido.codigopedido);

    puts("Digite o sabor");
    fflush(stdin);
    getchar();
    fgets(pedido.sabor, 49, stdin);

    printf("\n");
    printf("Escolha o tamanho\n");
    printf("1-pequena\n");
    printf("2-media\n");
    printf("3-Grande\n");
    scanf("%d",&tamanhopizza);

    switch (tamanhopizza){
        case 1:
            printf("Pequena\n");
            pizza1=pizza1+1;
            break;
        case 2:
            printf("Media\n");
            tamanho="Media";
            pizza2=pizza2+1;
            break;

        case 3:
            printf("Grande\n");
            tamanho="Grande";
            pizza3=pizza3+1;
            break;
        default:
            printf("Opcao invalida\n");
            break;
    }

    fflush(stdin);
    puts("Digite o preco da Pizza\n");
    scanf("%f", &pedido.preco);
if (pedido.preco<=9){
    printf("Valor invalido!!!  Valor menor do que 10 !");}

}

//   pedidos[indicePedido] = pedido;}



void listarSabor(){
    system ("color f7");
    int i;
    if (indicePedido == -1 ){
        puts("Nao existem pedidos cadastrados");
    }
    for (i = 0 ; i <= indicePedido ; i++){
        printf("Codigo do pedido: %d\n", pedidos[i].codigopedido);
        printf("Sabor: %s\n", pedidos[i].sabor);
        printf("Valor do pedido: %f\n", pedidos[i].preco);
    }

}



void realizarVenda(){
    if (indiceVenda == 50){
        puts("Nao eh possivel cadastrar mais vendas");
        return;
    }

    Venda venda;

    puts("Digite o codigo do cliente");
    scanf("%d", &venda.codigo_cliente);


    if (naoExisteClienteCadastrado(venda.codigo_cliente)){
        puts("Cliente nao existente");
        return;
    }


    puts("Digite o codigo do pedido");
    scanf("%d", &venda.codigo_pedido);


    int existepedido = 0;
    int i;
    for (i = 0 ; i <= indicePedido; i++){
        if (pedidos[i].codigopedido == venda.codigo_pedido){
            existepedido = 1;
            puts("Venda Realizada com sucesso!!!\n\n");
            break;
        }
    }
    if (existepedido == 0){
        puts("Pedido nao existente");
        return;
    }

    indiceVenda++;
    vendas[indiceVenda] = venda;
}



void listarVenda(){
    int i;
    if (indiceVenda == -1 ){
        puts("Nao existem vendas realizadas ");
    }
    for (i = 0; i <= indiceVenda ; i++){
        printf("A venda foi realizada o cliente de codigo:%d", vendas[i].codigo_cliente);
        printf("\n");
        printf("Codigo do Pedido:%d\n", vendas[i].codigo_pedido);
        printf("\n\n");
    }

}



void calcularTotalVendas(){
    float total = 0;
    int i, j;
    if (indiceVenda == -1 ){
        puts("Nao existem vendas realizadas ");
        return;
    }
    for (i = 0 ; i <= indiceVenda ; i++){
        for (j = 0 ; j <= indicePedido ; j++){
            if (pedidos[j].codigopedido == vendas[i].codigo_pedido){
                total = total + pedidos[j].preco;
                break;
            }
        }
    }
    printf("Total de vendas eh: %f\n\n\n", total);
}



int naoExisteClienteCadastrado(int codigo){
    int naoExisteCliente = 1;
    int i;
    for (i = 0 ; i <= indiceCliente ; i++){
        if (clientes[i].codigo == codigo){
            naoExisteCliente = 0;
            break;
        }
    }
    return naoExisteCliente;
}


void pizzamaisvendida(){

if((pizza1 > pizza2)&&(pizza1 > pizza3)){
    printf("Pequena e a mais vendida\n");
    }
        else{
            if((pizza2 > pizza1)&&(pizza2 > pizza3)){
                printf("Media e a mais vendida\n");
            }}

                     if((pizza3 > pizza1)&&(pizza3 > pizza2)){
                         printf("Grande e a mais vendida\n");
                     }
                          else{
                              if((pizza1 == pizza2)||(pizza1 == pizza3)){
                                  printf("Mesma quantidade de vendas:\n");
                              }}

                                        if((pizza2 == pizza1)||(pizza2 == pizza3)){
                                            printf("Mesma quantidade de vendas:\n");
                                        }
                                              else{
                                                  if((pizza3 == pizza1)||(pizza3 == pizza2)){
                                                      printf("Mesma quantidade de vendas:\n");
                                                  }}

}

void listararquivo(){

FILE *arquivo2;





    if((arquivo2 = fopen( "cliente.txt","rb")) == NULL)
      {
        printf("Erro ao abrir arquivo!!!\n\n");
return 1;
      }
    int j =0;
    while(!feof(arquivo2)){
    fread(&leitura[j],sizeof(Cadastro),1,arquivo2);
j++;

    }



   for (i=0; i<j;i++){
    printf("%s\n",leitura[i].nome);
    printf("%s\n",leitura[i].bairro);
    printf("%s\n",leitura[i].rua);

   }


    fclose(arquivo2);

return(menu);
}
